import { hex2Int, hex2Single, precisionNumber, hex2String, convertEndian } from '@/utils';
import type { ConfigItem } from '@/types/tester';

export const handleResult = (hexData: string = '', config: ConfigItem[]): ConfigItem[] => {
  if (!hexData) return [];
  return config
    .map(item => {
      let value: string | number = '';
      // 因为是字节，所以要乘以2
      value = hexData.slice(item.start * 2, (item.start + item.length) * 2) ?? '';
      // float 类型转换成带小数的值
      if (item.dataType === 'float') {
        value = convertEndian(value);
        value = hex2Single(value);
      } else if (item.dataType === 'char') {
        value = hex2String(value);
      } else {
        value = convertEndian(value);
        value = hex2Int(value);
      }
      // 精度，进行精度校准之后，需要将类型转换之前的类型
      if (item.precision && value !== '') {
        value = precisionNumber(value, item.precision);
      }
      // 有格式化函数
      if (item.format) {
        value = item.format(value);
      }
      return {
        ...item,
        value,
      };
    })
    .map((item, _, arr) => {
      const unit = (arr.find(i => item.readUnit === i.key)?.value as string) ?? item.unit ?? '';
      return {
        ...item,
        unit,
      };
    });
};
